﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//联合（共用体）
//联合体也是由⼀个或者多个成员构成,成员可以是不同的类型
//联合体的关键字是union.
//特点:所有成员共⽤同⼀块内存空间，起始地址一样,其中⼀个成员赋值，其他成员的值也跟着变化
//联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)
//联合体中的成员每次只能使用一个
//联合类型的声明 
//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义 
//	union Un un = { 0 };
//	//计算连个变量的⼤⼩ 
//	printf("%d\n", sizeof(un));
//	return 0;
//}

//联合求电脑存储字节序的方式
//int check() {
//	union Un {
//		char a;
//		int b;
//	}u;
//	 u.b = 1;
//	return u.a;
//}
//int main() {
//	int ret = check();
//	if (ret == 0) {
//		printf("大端");
//	}
//	else {
//		printf("小端");
//	}
//	return 0;
//}

//联合也存在内存对齐
//最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍
union Un1
{
	//总结成员有数组，对齐数直接看元素类型大小
	char c[5];//相当于放了5个char,对齐数是1
	int i;
};
union Un2
{
	short c[7];//同理，对齐数是2
	int i;
};
int main()
{
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));
	return 0;
}